Revert 20006:edf21ab7d7a4 and 20023:2b28320c6f8c.
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 5 Aug 2009 13:56:29 +0000 (14:56 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 5 Aug 2009 13:56:29 +0000 (14:56 +0100)
tools/python/xen/xend/XendConfig.py
tools/python/xen/xend/XendDomainInfo.py

index 7fd33b915906fb027155ed139c5ef0b75f655f31..9ef008c54e16b691d76b900f5742186399382daa 100644 (file)
@@ -1055,7 +1055,10 @@ class XendConfig(dict):
         if domain.getDomid() is not None:
             sxpr.append(['domid', domain.getDomid()])
 
-        if not legacy_only:
+        if legacy_only:
+            sxpr.append(['cpu_weight', int(self['vcpus_params'].get('weight', 256))])
+            sxpr.append(['cpu_cap', int(self['vcpus_params'].get('cap', 0))])
+        else:
             for name, typ in XENAPI_CFG_TYPES.items():
                 if name in self and self[name] not in (None, []):
                     if typ == dict:
@@ -1085,10 +1088,6 @@ class XendConfig(dict):
             if self.has_key(legacy) and self[legacy] not in (None, []):
                 sxpr.append([legacy, self[legacy]])
 
-        if self.has_key('vcpus_params'):
-            sxpr.append(['cpu_weight', int(self['vcpus_params'].get('weight', 256))])
-            sxpr.append(['cpu_cap', int(self['vcpus_params'].get('cap', 0))])
-
         if self.has_key('security_label'):
             sxpr.append(['security_label', self['security_label']])
 
index 020cecd4c6fec21cb3dc96fc7b4867d5fc87f4af..cdf650843f17275b9e20b09ff693b3db9fe169a5 100644 (file)
@@ -484,6 +484,7 @@ class XendDomainInfo:
                     # we just ignore it so that the domain can still be restored
                     log.warn("Cannot restore CPU affinity")
 
+                self._setSchedParams()
                 self._storeVmDetails()
                 self._createChannels()
                 self._createDevices()
@@ -2449,8 +2450,6 @@ class XendDomainInfo:
                 raise VmError("Cpu cap out of range, valid range is from 0 to %s for specified number of vcpus" %
                               (self.getVCpuCount() * 100))
 
-            xc.sched_credit_domain_set(self.domid, weight, cap)
-
         # Test whether the devices can be assigned with VT-d
         self.info.update_platform_pci()
         pci = self.info["platform"].get("pci")
@@ -2571,6 +2570,12 @@ class XendDomainInfo:
                 for v in range(0, self.info['VCPUs_max']):
                     xc.vcpu_setaffinity(self.domid, v, cpumask)
 
+    def _setSchedParams(self):
+        if XendNode.instance().xenschedinfo() == 'credit':
+            from xen.xend import XendDomain
+            XendDomain.instance().domain_sched_credit_set(self.getDomid(),
+                                                          self.getWeight(),
+                                                          self.getCap())
 
     def _initDomain(self):
         log.debug('XendDomainInfo.initDomain: %s %s',
@@ -2587,6 +2592,9 @@ class XendDomainInfo:
             # distribution for NUMA systems.
             self._setCPUAffinity()
 
+            # Set scheduling parameters.
+            self._setSchedParams()
+
             # Use architecture- and image-specific calculations to determine
             # the various headrooms necessary, given the raw configured
             # values. maxmem, memory, and shadow are all in KiB.